#include "sanla.h"

kirjautuminen::kirjautuminen(QWidget *parent) : QWidget(parent)
{
    asetustiedosto = new QFile("asetukset.txt");

    paalayout = new QHBoxLayout;
    layout = new QFormLayout;
    nappilayout = new QVBoxLayout;

    iplabel = new QLabel("Ip-osoite: ", this);
    ip = new QLineEdit(this);

    porttilabel = new QLabel("Portti: ", this);
    portti = new QLineEdit(this);

    vporttilabel = new QLabel("Vastaanottoportti: ", this);
    vportti = new QLineEdit(this);

    tallenna = new QPushButton("Tallenna", this);
    tallenna->setMaximumWidth(150);

    connect(tallenna, SIGNAL(clicked()), this, SLOT(Tallenna()));
    connect(tallenna, SIGNAL(clicked()), this, SLOT(close()));

    layout->addRow(iplabel, ip);
    layout->addRow(porttilabel, portti);
    layout->addRow(vporttilabel, vportti);

    nappilayout->addWidget(tallenna);

    layout->setAlignment(Qt::AlignLeft);
    nappilayout->setAlignment(Qt::AlignRight|Qt::AlignTop);

    paalayout->addLayout(layout);
    paalayout->addLayout(nappilayout);

    setLayout(paalayout);
}

void kirjautuminen::Tallenna()
{
  asetustiedosto->open(QIODevice::ReadWrite | QIODevice::Truncate);
  asetustiedosto->write(ip->text().toUtf8()+"\n");
  asetustiedosto->write(portti->text().toUtf8()+"\n");
  asetustiedosto->write(vportti->text().toUtf8());
  asetustiedosto->close();
}

kirjautuminen::~kirjautuminen()
{

}

sanla::sanla(QWidget *parent) : QWidget(parent)
{
    asetustiedosto = new QFile("asetukset.txt");

    tcpserveri = new QTcpServer(this);
    tcpserversocketti = new QTcpSocket(this);
    tcpclientsocketti = new QTcpSocket(this);

    iplabel = new QLabel(this);
    porttilabel = new QLabel(this);

    sanlanaani = Phonon::createPlayer(Phonon::NotificationCategory, Phonon::MediaSource("sanla.wav"));

    layout = new QVBoxLayout;
    nappilayout = new QHBoxLayout;

    layout->addWidget(iplabel);
    layout->addWidget(porttilabel);

    viiva = new QFrame(this);
    viiva->setFrameShape(QFrame::HLine);
    viiva->setFrameShadow(QFrame::Sunken);
    layout->addWidget(viiva);

    vastaanotettu = new QPlainTextEdit;
    vastaanotettu->setStyleSheet("background-color: #AAAAAA");
    vastaanotettu->setPlainText("Mui :)");
    vastaanotettu->setReadOnly(true);
    layout->addWidget(vastaanotettu);

    lahetysrivi = new QPlainTextEdit;
    lahetysrivi->setStyleSheet("background-color: #AAAAAA;");

    layout->addSpacing(20);

    laheta = new QPushButton(QString::fromUtf8("Lähetä"), this);
    laheta->setMaximumWidth(150);

    connect(laheta, SIGNAL(clicked()), this, SLOT(Laheta()));

    layout->addWidget(lahetysrivi);
    nappilayout->addWidget(laheta);
    layout->addLayout(nappilayout);

    sulje = new QPushButton("Sulje", this);
    sulje->setMaximumWidth(150);

    connect(sulje, SIGNAL(clicked()), this, SLOT(Sulje()));

    nappilayout->addWidget(sulje);

    nappilayout->setAlignment(Qt::AlignRight);
    setLayout(layout);
}

void sanla::Laheta()
{
        if(lahetysrivi->toPlainText() != "")
        {
         block = QByteArray(lahetysrivi->toPlainText().toUtf8());
         tcpclientsocketti->connectToHost(iposoite, portti);

         if(tcpclientsocketti->waitForConnected(2000))
         {
             tcpclientsocketti->write(block);
             tcpclientsocketti->disconnectFromHost();
             lahetysrivi->clear();
         }

         else
          QMessageBox::critical(this, tr("Sanla"), QString::fromUtf8("Yhteyttä ei voitu muodostaa!"));

        }

         else
          QMessageBox::critical(this, tr("Sanla"), QString::fromUtf8("Lähetysrivi tyhjä!"));

}

void sanla::Vastaanota()
{
    vastaanotettu->setPlainText(QString::fromUtf8(tcpserversocketti->readAll()));
    sanlanaani->play();
}

void sanla::Sulje()
{
    asetustiedosto->remove();
    asetustiedosto->close();
}

void sanla::LueAsetukset()
{
    asetustiedosto->open(QIODevice::ReadOnly);
    iposoite = QString::fromUtf8(QByteArray(asetustiedosto->readLine()));
    portti = QString::fromUtf8(QByteArray(asetustiedosto->readLine())).toUInt();
    vportti = QString::fromUtf8(QByteArray(asetustiedosto->readLine())).toUInt();
}

void sanla::YhteydenAlustus()
{
    LueAsetukset();

    if(!tcpserveri->listen(QHostAddress::Any, quint16(vportti)))
    {
        QMessageBox::critical(this, tr("Sanla"), tr("Yhteys kali"));
        close();
        return;
    }

    iplabel->setText("Oma ip: "+tcpserveri->serverAddress().toString());
    porttilabel->setText("Oma portti: "+QString::number(tcpserveri->serverPort()));
    connect(tcpserveri, SIGNAL(newConnection()), this, SLOT(UusiYhteys()));
}

void sanla::UusiYhteys()
{
    tcpserversocketti = tcpserveri->nextPendingConnection();
    connect(tcpserversocketti, SIGNAL(readyRead()), this, SLOT(Vastaanota()));
}

sanla::~sanla()
{
    sanlanaani->deleteLater();
}
